linux_windowsfandomcom_ru-20200214-history
Прокси-сервер на базе Linux (Debian)
В результате выполнения данной инструкции у вас будет полностью рабочий прокси-сервер с установленными пакетами: Squid 3 - сам прокси; Lightsquid - служит для сбора статистики работы пользователей, основываясь на логах прокси-сервера Squid; Sqstat - скрипт, который позволяет смотреть активные соединения, загрузку канала и среднюю загрузку канала; Ipcad - это программа для учета трафика, которая может вести подсчет несколькими механизмами, например через интерфейсы BPF, libpcap и iptables ULOG; Webmin - это графический web интерфейс для управления сервером на базе Unix подобных операционных систем. То есть установив Webmin вы можете удалённо конфигурировать и управлять Linux сервер в удобном графическом интерфейсе на русском языке через браузер. Также настроим NAT. Везде, где написано your_server_ip - подставляете ip адрес интерфейса своего прокси-сервера, который смотрит во внутреннюю сеть. Открываем доступ к интернету для компьютеров в локальной сети Для начала нам нужно открыть полный доступ к интернету для всех компьютеров в нашей локальной сети. Для этого воспользуемся NATом. NAT – технология позволяющая пускать весь сетевой трафик через один адрес. То есть все запросы к интернету в локальной сети, будут обрабатываться именно сервером. Создадим файл с настройками sudo nano /etc/nat Внесем в этот фал следующее: #!/bin/sh #Включаем форвардинг пакетов echo 1 > /proc/sys/net/ipv4/ip_forward #Разрешаем траффик на lo iptables -A INPUT -i lo -j ACCEPT #Разрешаем доступ из внутренней сети наружу iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT #Включаем NAT iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/16 -j MASQUERADE #Разрешаем ответы из внешней сети iptables -A FORWARD -i eth1 -m state - -state ESTABLISHED,RELATED -j ACCEPT #Запрещаем доступ снаружи во внутреннюю сеть iptables -A FORWARD -i eth1 -o eth0 -j REJECT #Заворачиваем http на прокси iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination your_server_ip:3128 Сохраним файл и присвоим ему права на выполнение: sudo chmod +x /etc/nat Добавим запуск NATа (строку post-up /etc/nat) в файл с сетевыми настройками: sudo nano /etc/network/interfaces ваш файл должен выглядеть так: auto lo iface lo inet loopback auto eth0 iface eth0 inet static address your_server_ip netmask 255.255.0.0 dns-nameservers 8.8.8.8 8.8.4.4 auto eth1 allow-hotplug eth1 iface eth1 inet dhcp post-up /etc/nat Сохраняем, закрываем и перезагружаем сервер: sudo reboot В таком виде, все готово для раздачи интернета компьютерам в сети. Если интернет появился, двигаемся дальше, если нет, проверяем что сделали не так. Устанавливаем веб-сервер Apache: sudo apt-get install apache2 Установка и настройка Squid3 Теперь нам нужно установить Squid3 – сам прокси сервер. В статье описаны базовые настройки, для более углубленной настройки, советую почитать документацию по squid. Обновляемся и создаем каталог squid3 sudo apt-get update sudo apt-get upgrade sudo mkdir /var/www/squid3 После чего скачиваем и распаковываем в созданный каталог последнюю версию squid (на момент написания инструкции 4.07.2017 это была версия 3.5.26) cd /var/www/squid3 sudo wget ftp://ftp.fu-berlin.de/unix/www/squid/squid/squid-3.5.26.tar.gz - tar -zxvf squid-3.5.26.tar.gz Выставляем рекурсивно права 755 пользователю и группе www-data на каталог и его содержимое sudo chmod -R 755 /var/www/squid3 sudo chown -R www-data:www-data /var/www/squid3 После установки откроем файл /etc/squid3/squid.conf sudo nano /etc/squid/squid.conf В первую очередь найдем строку http_port 3128 и добавим к ней значение intercept и IP адрес сервера, чтобы получилось вот так: http_port your_server_ip:3128 intercept Это делается для того, чтобы в последующем нам не приходилось настраивать прокси сервер на всех клиентских машинах (прокси будет прозрачным). Теперь, нужно указать сеть, в которой будет работать наш прокси сервер, для этого раскомментируем строку acl localnet src 192.168.0.0/16 # RFC1918 possible internal network разрешаем доступ к прокси из внутренней сети, расскомментировав строки http_access allow localnet http_access allow localhost http_access deny all Теперь настроим кэширование. Нужно раскомментировать и поменять значения на такие: cache_dir ufs /var/spool/squid3 2048 16 256 Далее расскомментируем строку maximum_object_size 4 MB тем самым укажем максимальный размер кэшируемого объекта. Раскомментируем строку maximum_object_size_in_memory 512 KB тем самым указываем максимальный объем кэшированного объекта в памяти. Раскомментируем строку cache_mem 256 MB и заменим значение с 256 на 1024, тем самым указываем допустимый объем памяти. Вот мы и настроили кэширование. Кэширование должно снизить нагрузку на канал и увеличить скорость открытия страниц. Кэш очищается при перезагрузке сервера. Теперь включим ведение логов, для этого раскомментируем строку access_log daemon:/var/log/squid3/access.log squid и раскомментируем ниже logfile_rotate 31 (файлы логов будут храниться 31 день, после будут перезаписываться самые старые). На этом базовую настройку squid3 можно завершить. Остальные параметры оставляем без изменений, сохраняем файл настроек. Перед тем как перезапускать службу выполним проверку файла конфигурации: squid3 -k check Если команда отрабатывает без вывода - ошибок нет, в противном случае изучаем вывод и исправляем допущенные ошибки. После этого перезапустим службу, чтобы применить внесенные изменения. sudo service squid3 restart В том случае, когда были изменены параметры кэша следует его перестроить: sudo service squid3 stop sudo squid3 -z sudo service squid3 start Перезапустим squid3 sudo service squid3 restart Если вы сделали все как написано в статье, значит у вас будет полностью рабочий прокси сервер. LightSquid Это утилита для сбора и анализа трафика прокси-сервера Squid. Она служит для сбора статистики работы пользователей, основываясь на логах прокси-сервера Squid и представляет собой набор из нескольких скриптов написанных на языке программирования perl. Перед тем как начать установку и конфигурирование lightsquid, необходимо проверить, что на сервере были установлены и корректно работали Squid и Apache2. Создаём каталог, где будет установлен lightsquid. sudo mkdir /var/www/lightsquid После чего скачиваем и распаковываем в созданный каталог последнюю версию lightsquid sudo cd /var/www/lightsquid sudo wget https://downloads.sourceforge.net/project/lightsquid/lightsquid/1.8/lightsquid-1.8.tgz tar -zxf lightsquid-1.8.tgz Выставляем рекурсивно права 755 пользователю и группе www-data на каталог и его содержимое sudo chmod -R 755 /var/www/lightsquid sudo chown -R www-data:www-data /var/www/lightsquid (если не получается – то можно зайти в графическом интерфейсе и вручную изменить свойства папки owner 755 и access control – 3 позиции anyone) Делаем скрипты программы исполняемыми sudo chmod +x *.cgi sudo chmod +x *.pl Ставим зависимые пакеты, без которых программа работать не будет sudo apt-get install perl Сохраняем используемый по умолчанию конфигурационный файл и открываем исходный файл на редактирование: sudo nano -Y sh /var/www/lightsquid/lightsquid.cfg #path to additional `cfg` files $cfgpath ="/var/www/lightsquid"; #path to `tpl` folder $tplpath ="/var/www/lightsquid/tpl"; #path to `lang` folder $langpath ="/var/www/lightsquid/lang"; #path to `report` folder $reportpath ="/var/www/lightsquid/report"; #path to access.log $logpath ="/var/log/squid3"; #path to `ip2name` folder $ip2namepath ="/var/www/lightsquid/ip2name"; $lang ="ru-utf8"; $bigfilelimit = 2*1024*1024; $perusertrafficlimit = 1*1024*1024*1024; Теперь настало время объяснить почему в переменной $lang конфигурационного файла lightsquid.cfg у нас указано значение ru-utf8, хотя в поставке LightSquid нет такого языкового файла в каталоге указанном в переменной $langpath (/var/www/lightsquid/lang/). Дело в том, что если мы будем использовать любой из предложенных ru*.lng файлов, то можем нарваться на ситуацию когда данные из файла сопоставлений realname.cfg не состыкуются по используемой кодировке с кодировкой языкового файла LightSquid. Так как в нашем случае в системе по умолчанию используется кодировка UTF-8, то и генерируемый файл realname.cfg будет содержать данные в этой кодировке, и чтобы не было разночтений с языковым файлом LightSquid сделаем свой языковой файл, сконвертировав его из уже имеющегося, после чего откроем получившийся файл на редактирование: sudo iconv -f cp1251 -t utf8 /var/www/lightsquid/lang/ru.lng -o /var/www/lightsquid/lang/ru-utf8.lng sudo nano -Y sh /var/www/lightsquid/lang/ru-utf8.lng Изменим одну строчку в начале файла, указав его кодировку: MSG_CODEPAGE=UTF-8 Теперь настало время интегрировать LightSquid в ранее установленный веб-сервер Apache2. Для этого к основной конфигурации Apache2 можно подключить конфигурационный модуль /etc/apache2/conf-available/lightsquid.conf. Как всегда сохраним копию и откроем исходный файл на редактирование: sudo cp /etc/apache2/conf-available/lightsquid.conf /etc/apache2/conf-available/lightsquid.conf.default sudo nano -Y sh /etc/apache2/conf-available/lightsquid.conf Изменённое содержимое файла будет таким: Alias /lightsquid/ /var/www/lightsquid/ AddHandler cgi-script .cgi Require all granted Подключаем этот конфигурационный модуль к основной конфигурации веб-сервера: sudo a2enconf lightsquid Так как веб-страницы LightSquid формируются cgi-скриптами, для веб-сервера Apache2 потребуется включить модуль обработки CGI (будет создан линк в каталоге /etc/apache2/mods-enabled/): sudo a2enmod cgi Enabling module cgi. To activate the new configuration, you need to run: service apache2 restart После завершения установки открываем на редактирование конфигурационный файл сетевых настроек Apache2 /etc/apache2/ports.conf (этот файл включен для обработки по умолчанию в основной конфигурационный файл Apache2 — /etc/apache2/apache2.conf) и меняем настройки параметра Listen 'таким образом, чтобы порты веб-сервера ('80/'443') прослушивались только на стороне интерфейса локальной сети: # If you just change the port or add more ports here, you will likely also # have to change the VirtualHost statement in # /etc/apache2/sites-enabled/000-default.conf Listen your_server_ip:80 Listen your_server_ip:443 Listen your_server_ip:443 # vim: syntax=apache ts=4 sw=4 sts=4 sr noet Затем нужно добавить в конец файла конфигурации апача apache2.conf строки, которые позволят запускать наши скрипты: Сам файл лежит вот тут: /etc/apache2/apache2.conf Alias /lightsquid /var/www/lightsquid Options +ExecCGI AddHandler cgi-script .cgi AllowOverride All Затем прописываем наш скрипт в автозагрузку: sudo crontab –e Добавьте */20 * * * * /var/www/lightsquid/lightparser.pl today После проделанных изменений перезагружаем конфигурацию веб-сервера Apache2: sudo service apache2 reload Отчеты доступны по адресу http://your_server_ip/lightsquid Генерация отчетов вручную: /var/www/lightsquid/check-setup.pl /var/www/lightsquid/lightparser.pl Реальные имена пользователей и группы пользователей: Открываем файл realname.cfg и прописываем там IP пользователей и их реальные имена, которые будут отображаться в отчётах lightsquid sudo nano /var/www/lightsquid/realname.cfg 192.168.1.2 Sveta 192.168.1.4 Natasha 192.168.1.5 Rita 192.168.1.6 Dima 192.168.1.7 Vera И в конфиге lightsquid.cfg прописать #use or not .realname files. #realname contain pair userid -> Full User Name $userealname = 1; При желании получить отчет по группам – редактируем group.cfg Доступ к статистике по логину и паролю: Для ограничения доступа к серверу статистики по логину и паролю сделаем следующее: Допустим, нам нужно сделать пользователя с именем lightsquid. Приводим файл .htaccess к следующему виду: Options FollowSymLinks ExecCGI DirectoryIndex index.cgi AuthType Basic AuthName "Private zone. Only for administrator!" AuthUserFile /var/www/lightsquid/.htpasswd require user lightsquid Затем создаём файл .htpasswd /usr/bin/htpasswd -c /var/www/lightsquid/.htpasswd Добавляем пользователя /usr/bin/htpasswd -n lightsquid Дважды вводим пароль и полученный результат добавляем в файл .htpasswd Sqstat Это скрипт, который позволяет смотреть активные соединения, загрузку канала, и среднюю загрузку канала. Для этого у вас уже должен быть настроен апач. Скачиваем последнюю версию, распаковываем и переносим в нужную папку: sudo wget -c samm.kiev.ua/sqstat/sqstat-1.20.tar.gz sudo tar xvfz sqstat-1.20.tar.gz sudo cd ./sqstat-1.20 sudo mkdir /var/www/sqstat sudo cp -R * /var/www/sqstat* Всё, теперь нам необходимо настроить Squid-cgi и cachemgr.cgi, Ставим: sudo apt-get install squid-cgi Сейчас необходимо добавить следующую строчку в /etc/squid/cachemgr.conf sudo echo "your_server_ip" >> /etc/squid/cachemgr.conf Мы переходим к настройке SqStat: sudo nano /var/www/sqstat/config.inc.php Нас просят добавить следующий блок в Apache, добавляем: sudo nano /etc/apache2/apache2.conf или sudo nano /etc/apache2/sites-available/sqstat.conf Alias /sqstat /var/www/sqstat/ DirectoryIndex sqstat.php Order deny,allow Allow from all Перезагружаем сервисы: sudo service apache2 restart sudo service squid3 restart Вводим в браузере http://your_server_ip/sqstat/sqstat.php и наблюдаем за тем, кто чем занимается в рабочее время. Ipcad Сначала устанавливаем пакеты: apt-get install libpcap-dev apt-get install build-essential apt-get install linux-libc-dev apt-get install rsh-client Скачиваем сам ipcad: wget http://lionet.info/soft/ipcad-3.7.3.tar.gz tar -xvzf ipcad-3.7.3.tar.gz cd ipcad-3.7.3 Подправляем некоторые файлы: В headers.h комментируем строки #ifdef HAVE_LINUX_NETLINK_H #include #endif на //#ifdef HAVE_LINUX_NETLINK_H #include //#endif Добавьте в main.c #include "signal.h" В файле pps.c добавить инклуды #include "headers.h" #include "signal.h" В файле servers.c добавить инклуд #include "signal.h" Конфигурируем и устанавливаем ipcad ./configure make make install make install-man (кому нужен мануал) Создаем файл ipcad.dump в папке /var/log/ipcad Выставляем права на файл chmod 600 /var/log/ipcad/ipcad.dump Сбрасываем данные в ipcad.dump rsh your_server_ip dump Запускаем crontab –e и записываем автозапуск ipcad каждый час 0 * * * * killall ipcad && /usr/local/bin/ipcad –rds Это будет запускать ipcad таким образом, что при загрузке он восстанавливает данные о статистике из dumpfile, уходил в фон, а при выключении сбрасывал все данные в тот же dumpfile. Сама команда для запуска выглядит следующим образом: /usr/local/bin/ipcad -rds вот и всё. Установка Webmin Webmin представляет из себя набор cgi-скриптов, написанных на Perl, поэтому надо сначала поставить пакеты необходимые для его работы. Запускаем терминал и одной командой устанавливаем необходимые пакеты: apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl libdigest-md5-perl Далее, если ещё не установили, я бы порекомендовал поставить SSH сервер, так как удаленно администрировать намного проще: apt-get install openssh-server Осталось скачать самую свежую версию Webmin. Это можно сделать двумя способами. Скачать deb пакет Webmin c официального сайта программы и установить его. Либо скачать и установить Webmin используя терминал: Добавляем репозиторий Webmin, редактируем файл /etc/apt/sources.list: nano /etc/apt/sources.list В самом конце добавляем строку: deb http://download.webmin.com/download/repository sarge contrib Сохраняем изменения и закрываем редактор. Устанавливаем GPG ключ: wget http://www.webmin.com/jcameron-key.asc apt-key add jcameron-key.asc Устанавливаем Webmin, для этого вводим команду: apt-get update apt-get install webmin Запустить Webmin можно через браузер для этого введите следующий адресу в строку url: https://localhost:10000 Резервное копирование (вручную) Архивный файл, который мы собираемся создать, будет храниться в папке "backup", в домашнем каталоге. После создания резервной копии вашей системы вы можете переместить её в любое другое место на ваш выбор: жёсткий диск или в "облаке" (Ubuntu One, Dropbox и т.д.). Откройте терминал (Ctrl + Alt + T) и выполните следующую команду, чтобы создать папку, в которую мы хотим сохранить файл резервной копии: sudo mkdir ~/backup && cd ~/backup Теперь запустим резервное копирование системы, выполнив следующую команду: sudo tar cvpjf backup.tar.bz2 --exclude=/proc4 --exclude=/mnt --exclude=/sys / --exclude=/lost+found --exclude=/tmp --exclude=/backup.tar.bz2 По окончании резервного копирования вы можете просмотреть папку, содержащую файл резервной копии архива с помощью следующей команды: sudo nautilus ~/backup Восстановить систему можно, выполнив следующую команду: sudo tar xvpfj backup.tar.bz2 -C / Или этой командой, где указан полный путь к файлу: sudo tar xvpfj ~/backup/backup.tar.bz2 -C / Синхронизация времени по NTP Ubuntu использует ntpdate и ntpd. ntpdate Ubuntu стандартно устанавливается с ntpdate и будет запускать его при каждой загрузке один раз для установки времени по NTP серверу Ubuntu. ntpdate -s ntp.ubuntu.com ntpd Сервис NTP ntpd вычисляет уход ваших системных часов и постоянно подправляет их, благодаря чему не происходит сильных изменений, что может приводить к непоследовательности в журналах. Ценой этому небольшое расходование мощности процессора и оперативной памяти, но для современного сервера это несущественно. Установка Для установки ntpd из терминала введите: sudo apt-get install ntp Настройка Отредактируйте /etc/ntp.conf для добавления/удаления серверов. По умолчанию эти сервера такие: # Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for # more information. server 0.ubuntu.pool.ntp.org server 1.ubuntu.pool.ntp.org server 2.ubuntu.pool.ntp.org server 3.ubuntu.pool.ntp.org Для Белоруссии они будут такие: server 1.by.pool.ntp.org server 1.europe.pool.ntp.org server 0.europe.pool.ntp.org После изменений конфигурационного файла вам надо перезапустить ntpd: sudo service ntp restart Вот и всё ! Bonus - пути к файлам конфигурации Файл конфигурации sqstat /var/www/sqstat/config.inc.php Файл конфигурации squid /etc/squid3/squid.conf Файл конфигурации lightsquid /var/www/lightsquid/lightsquid.conf Файл конфигурации apache2 /etc/apache2/apache2.conf /etc/apache2/httpd.conf Файл конфигурации Cachemgr /etc/squid/cachemgr.conf /etc/nat /etc/network/interfaces__БЕЗ_ССЫЛКИ_НА_НОВЫЙ_РАЗДЕЛ__ Категория:Linux Категория:Squid3 Категория:Proxy Категория:Debian Категория:Internet Категория:Wan Категория:Lightsquid Категория:Sqstat Категория:Ntp Категория:Webmin Категория:Ipcad